package javamusic.DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.concurrent.CancellationException;
import javamusic.excepcion.DAOExcepcion;
import javamusic.modelo.Pedido;
import javamusic.modelo.Producto;
import javamusic.modelo.Artista;
import javamusic.modelo.Cancion;
import javamusic.util.ConexionBDKaraoke;

public class PedidoDAO extends BaseDAO{
	/*
	 *  INSERTAR PEDIDO
	 */
	public void PedidoInsertar(Pedido vo) throws DAOExcepcion{
		String query = "insert into pedido (idpedido,tipo,cantidad,fecha,idcliente,idcomprobante) values (?,?,?,?,?,?)";
		Connection con =null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBDKaraoke.obtenerConexion();
			stmt = con.prepareStatement(query);			
			stmt.setInt(1,vo.getIdpedido());
			stmt.setString(2,vo.getTipo());
			stmt.setDouble(3,vo.getCantidad());
			stmt.setString(4,vo.getFecha());
			stmt.setInt(5,vo.getIdcliente());
			stmt.setInt(6,vo.getIdcomprobante());
			int i = stmt.executeUpdate();
			if(i !=1){
				throw new SQLException("No se pudo insertar"); // comunica al negocio
			}		
		} catch (SQLException e) {
		System.err.println(e.getMessage());
		throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}		
	}

	
  /*
   *  REALIZAR PEDIDOS DE CANCIONES
   */
	/*
		String query = "select c.idcancion as idcancion,c.nombre as Cancion,a.nombre from BDkaraoke.cancion c " 
                     + "inner join BDkaraoke.artista a on c.idartista =a.idartista "
                     + "where c.nombre like '%"+NombreArtista+"%' or a.nombre like '%"+NombreArtista+"%' ";
	*/	
		
	public Collection<Cancion>PedidoBuscarCancion(String NombreArtista) throws DAOExcepcion {
		String query = "select c.idcancion as idcancion,c.nombre as Cancion,a.nombre, a.idartista from BDkaraoke.cancion c " 
                     + "inner join BDkaraoke.artista a on c.idartista =a.idartista "
                     + "where c.nombre like '%"+NombreArtista+"%' or a.nombre like '%"+NombreArtista+"%' ";
		Collection<Cancion> Art = new ArrayList<Cancion>();
		Connection con =null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionBDKaraoke.obtenerConexion();
			stmt = con.prepareStatement(query);
			rs =stmt.executeQuery();
			while (rs.next()){
			    Cancion can = new Cancion();			    
			    can.setIdcancion(rs.getInt("idcancion"));
			    can.setCancion(rs.getString("Cancion"));
			    can.setNombre(rs.getString("nombre"));
			    can.setIdartista(rs.getInt("idartista"));
				Art.add(can);
			}			
		} catch (Exception e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		}finally{
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return Art;		
	}
	
	/* BUSQUEDA POR COMPROBANTE
	 * 
	 */
	
	public Collection<Pedido>PedidoBuscarComprobante(int idcomprobante) throws DAOExcepcion {
		String query = "select idcliente from pedido where idcomprobante=" + idcomprobante;
		Collection<Pedido> Art = new ArrayList<Pedido>();
		Connection con =null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionBDKaraoke.obtenerConexion();
			stmt = con.prepareStatement(query);
			rs =stmt.executeQuery();
			while (rs.next()){
			    Pedido can = new Pedido();			    
			    can.setIdcliente(rs.getInt("idcliente"));
			    Art.add(can);
			}			
		} catch (Exception e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		}finally{
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return Art;		
	}
	
	
	/*
	 *  REALIZAR PEDIDOS DE PRODUCTO
	 */
	public Collection<Producto> PedidoBuscaProducto(String nombre) throws DAOExcepcion{
		String query = "select idproducto,nombre, precio from producto where  nombre like ?";
		Collection<Producto> pro = new ArrayList<Producto>();
		Connection con =null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBDKaraoke.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1,"%" + nombre + "%");
			rs =stmt.executeQuery();
			while (rs.next()){
				Producto vo = new Producto();
				vo.setIdproducto(rs.getInt("idproducto"));
				vo.setNombre(rs.getString("nombre"));
				vo.setPrecio(rs.getDouble("precio"));
				pro.add(vo);
			}		
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());			
			}finally{
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return pro;
		}
	
	
	public Collection<Cancion> ListarCancion() throws DAOExcepcion {
		Collection<Cancion> Art = new ArrayList<Cancion>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBDKaraoke.obtenerConexion();
			String query = "select idcancion,nombre, idartista from cancion";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cancion can = new Cancion();			    
				can.setIdcancion(rs.getInt("idcancion"));
				can.setNombre(rs.getString("nombre"));	
				can.setIdartista(rs.getInt("idartista"));
			    Art.add(can);
	
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return Art;
	} 
	
	/* 
	*  PROCEDIMIENTOS DE PRODUCTO - PEDIDO OBTENER
	*/	    
   public Cancion PedidoObtener(int PedId) throws DAOExcepcion {
	    Cancion vo= new Cancion();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBDKaraoke.obtenerConexion();
			String query = "select idcancion,nombre, idartista from Cancion where idcancion=?";
			stmt = con.prepareStatement(query);
			stmt.setInt(1,PedId);
			rs = stmt.executeQuery();			
			if (rs.next()) {
				vo.setIdcancion(rs.getInt(1));
				vo.setNombre(rs.getString(2));
				vo.setIdartista(rs.getInt(3));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	
	
}

